Soru & Cevap

Wi - Fi && Mobile Data

03.12.2013 - 10:07

Merhaba,

Wi-Fi ve Mobil verinin açık olup olmadığını kontrol edip, kapalı ise nasıl açabilirim?

106 Görüntülenme

16 Cevap

Sitedeki sorulara cevap verebilmek için giriş yapın ya da üye olun.

Profile picture for user benaykut
benaykut
07.09.2022 - 08:27

Motorola telsiz kullanan var mı

Profile picture for user benaykut
benaykut
25.08.2022 - 07:14

wifi, 5651 loglama bilen var mı.

picture-3650-1421928561.jpg
anilsozeri
05.12.2013 - 10:57

Galaxy SIII , Android OS 4.1.2

/sites/default/files/cevaplar/dosya/2020/file-log_0.txt
Profile picture for user canciloglu
canciloglu
05.12.2013 - 04:50

Hangi cihazda deniyorsun?

Yüklü Android OS versiyonu nedir?

Loglarda herhangi bir hata görünüyor mu, hata alıyor musun?

picture-3650-1421928561.jpg
anilsozeri
05.12.2013 - 09:28

Bu arada bir önceki mesajımda belirtmeyi unutmuşum sistem servislerini onCreate metodumun içinde alıyorum onlarda da herhangi bir problem yok.

connectivityManager = (ConnectivityManager)getSystemService(Context.CONNECTIVITY_SERVICE);

picture-3650-1421928561.jpg
anilsozeri
05.12.2013 - 09:24

Can Bey, yazdığınız metodu aynen yazdım;

protected void setMobileDataOn(boolean enabled) throws Throwable{
        final Class connectivityManagerClass = Class.forName(connectivityManager.getClass().getName());
        final Field iConnectivityManagerField = connectivityManagerClass.getDeclaredField("MobileService");
        final Object iConnectivityManager = iConnectivityManagerField.get(connectivityManager);
        final Class iConnectivityManagerClass = Class.forName(iConnectivityManager.getClass().getName());
        final Method method = iConnectivityManagerClass.getDeclaredMethod("setMobileDataEnabled", Boolean.TYPE);
        method.setAccessible(true);
        method.invoke(iConnectivityManager, enabled);
    }

Bu şekilde de çağırdım;

setMobileDataOn(true);

Reflect sınıflarını da Eclipse otomatik olarak import etti;

import java.lang.reflect.Field;
import java.lang.reflect.Method;

AndroidManifest.xml dosyasına gerekli izinleri de verdim;

<uses-permission android:name="android.permission.CHANGE_NETWORK_STATE"/>

Fakat herhangi bir sonuç alamadım, Wi-Fi problemim çözüldü ancak Mobil Veriyi bir türlü açamadım.

picture-3650-1421928561.jpg
anilsozeri
04.12.2013 - 12:01

Teşekkürler Can Bey, Kullanıcı iznini doğrudan almayacağım ama Alert Dialog şeklinde sormayı planlıyorum 'Wi-Fi veya Mobil Veriyi Aç' şeklinde ona göre açacağım, tekrar yardımlarınız için çok teşekkürler, iyi çalışmalar.

Profile picture for user canciloglu
canciloglu
04.12.2013 - 12:56

Bu arada eklemeyi unuttum. Uygulamanın manifest dosyasında

Wi-Fi için 

    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE"></uses-permission>
    <uses-permission android:name="android.permission.CHANGE_WIFI_STATE"></uses-permission>

izinleri

Mobil data için 

    <uses-permission android:name="android.permission.CHANGE_NETWORK_STATE"/>

izni olmak zorunda.

Kolay gelsin.

Profile picture for user canciloglu
canciloglu
04.12.2013 - 12:54

Merhaba Anıl,

Bu soruna https://gelecegiyazanlar.turkcell.com.tr/soru/gps-location verdiğim cevabı açayım o zaman. Dediğim gibi donanım ayarlarını programatik olarak açıp kapayabilmek için kullanıcı izinlerine ihtiyacın var bu izinler olmadan bu ayarları değiştiremezsin. Uygulamanın manifest dosyasına ekleyeceğin uygun kullanıcı izinleriyle cihazın Wi-Fi, Mobil Data, ve Bluetooth'unu açıp kapayabilirsin. Fakat GPS'i programatik olarak açıp kapayamazsın. İşletim sistemi buna izin vermez, sadece sistem uygulamaları bunu yapabilir.

Aşağıdaki kod parçalarını kullanarak Wi-Fi ve Mobil Datayı uygulamadan açıp kapatabilirsin. Fakat standart bir uygulamada doğru yol kullanıcının haberi olmadan bu ayarları değiştirmek değil, kullanıcıdan bu ayarları açıp kapamasını istemek ve kullanıcıyı ayarlara yönlendirmektir bilgin olsun.

Wi-Fi'yi aşağıdaki şekilde açıp kapayabilirsin:

[kod]

    protected void setWifiDataOn(boolean enabled) {
        WifiManager wifiMgr = (WifiManager)this.getApplicationContext().getSystemService(Context.WIFI_SERVICE);
        wifiMgr.setWifiEnabled(enabled); 
    }

[/kod]

Mobil Datayı da aşağıdaki şekilde açıp kapayabilirsin. Burada Android SDK bu iş için bize doğrudan bir yöntem vermediği için Java'daki Reflection API'sini kullanarak bu işi yapabiliyoruz:

[kod]

    protected void setMobileDataOn(boolean enabled) throws Throwable 
    {
           final ConnectivityManager connMgr = (ConnectivityManager)  getApplicationContext().getSystemService(Context.CONNECTIVITY_SERVICE);
          
           final Class connMgrClass = Class.forName(connMgr.getClass().getName());
           final Field iConnectivityManagerField = connMgrClass.getDeclaredField("mService");
           iConnectivityManagerField.setAccessible(true);
           
           final Object iConnectivityManager = iConnectivityManagerField.get(connMgr);
           final Class iConnectivityManagerClass =  Class.forName(iConnectivityManager.getClass().getName());
           final Method method = iConnectivityManagerClass.getDeclaredMethod("setMobileDataEnabled", Boolean.TYPE);
           method.setAccessible(true);

           method.invoke(iConnectivityManager, enabled);
    }

[/kod]

 

Deddiğim gibi doğru yol kullanıcının haberi olmadan bu ayarları değiştirmek değil, kullanıcıdan bu ayarları açıp kapamasını istemek ve kullanıcıyı ayarlara yönlendirmektir.

Kolay gelsin.

picture-3650-1421928561.jpg
anilsozeri
03.12.2013 - 10:33

Kontrol kısmını hallettim kapalıysa nasıl açacağımı araştırıyorum, yardımlarınız için teşekkürler.

picture-3606-1408610132.jpg
cgural
03.12.2013 - 05:23

WifiManager ve ConnectivityManager için örnekler araştırmalısınız.

picture-8337-1385290534.jpg
erhan.yilmaz
03.12.2013 - 05:14

İkinci gönderdiğim fonksiyon, bağlı olup olmadığını gösteriyor. İlk gönderdiğim ise bağlıysa şunu yap bağlı değilse bunu yap demek için. 2sini birden kullanman lazım yani.

Diğer sorunun cevabı bende yok malesef

picture-3650-1421928561.jpg
anilsozeri
03.12.2013 - 01:22

Teşekkürler, bunu görmüştüm ama Data için TelephonyManager kullanmışlar falan kafam karıştı o nedenle sormaya gerek duydum sadece bunlar ile her ikisini de kontrol edebilirim yani öyle mi?

- Kapalıysa nasıl açabilirim yani kapalıysa olduğu duruma ne yazmalıyım ki açılsın?

picture-8337-1385290534.jpg
erhan.yilmaz
03.12.2013 - 12:29

Yukarda yazdığım kontrol mekanizmasını çalıştırmak için bu fonksiyonu kulanmalısın. Yolladığımı düzenleyemedim :) 

private boolean isNetworkConnected() {
              ConnectivityManager cm = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
              NetworkInfo ni = cm.getActiveNetworkInfo();
              if (ni == null) {
               // baglanti yok
               return false;
              } else
               return true;
             }

Bu fonksiyon sana true veya false dönecek ona göre yukarda yazdığımı yaptıracaksın

picture-8337-1385290534.jpg
erhan.yilmaz
03.12.2013 - 12:29

Yukarda yazdığım kontrol mekanizmasını çalıştırmak için bu fonksiyonu kulanmalısın. Yolladığımı düzenleyemedim :) 

private boolean isNetworkConnected() {
              ConnectivityManager cm = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
              NetworkInfo ni = cm.getActiveNetworkInfo();
              if (ni == null) {
               // baglanti yok
               return false;
              } else
               return true;
             }

Bu fonksiyon sana true veya false dönecek ona göre yukarda yazdığımı yaptıracaksın

picture-8337-1385290534.jpg
erhan.yilmaz
03.12.2013 - 12:27

Datanın açık olup olmadığını kontrol için:

if(isNetworkConnected()){
                    // açıksa yapılacaklar
                }else{
                    // kapalıysa yapılacaklar                       
                }

Tabi bunu kontrol etmek için AndroidManifest.xml dosyasında,

<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />

izinlerini vermen gerekiyor. Ama kapalıysa nasıl açarsın onu bilmiyorum :)